extends TextureButton

@onready var 图标 = get_node("物品图片")
@onready var 数量 = get_node("数量")
@export var data:ItemData=null
@export var 序号:int=-1
var 当前物品

const 物品显示菜单场景 = preload("res://场景/快捷菜单/物品显示菜单.tscn")
const 物品菜单场景 = preload("res://场景/快捷菜单/物品菜单.tscn")
var 当前菜单实例
var 是否显示物品菜单 = false

func _ready():
	# 确保节点存在
	if !图标 or !数量:
		push_error("背包格子缺少必要的子节点")
		return
	
	# 连接右键点击信号
	mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
	gui_input.connect(_on_gui_input)

func set_item(item):
	if !图标 or !数量:
		print("背包格子缺少必要的子节点")
		return
	
	当前物品 = item
		
	if item:
		if item.icon:
			图标.texture = item.icon
			图标.visible = true
		if item.count > 1 and item.is_stackable:
			数量.text = str(item.count)
			数量.visible = true
		else:
			数量.text = ""
			数量.visible = false
	else:
		图标.texture = null
		图标.visible = false
		数量.text = ""
		数量.visible = false

# 处理输入事件
func _on_gui_input(event):
	if event is InputEventMouseButton and event.pressed and 当前物品:
		if event.button_index == MOUSE_BUTTON_RIGHT:
			# 右键点击，显示物品菜单
			显示物品菜单()
			是否显示物品菜单 = true
			# 阻止显示物品信息
			get_viewport().set_input_as_handled()

#鼠标进入
func _on_mouse_entered():
	if 当前物品 and !是否显示物品菜单:
		# 如果已有菜单实例，先清理
		清理当前菜单()
		
		# 创建物品信息菜单实例
		当前菜单实例 = 物品显示菜单场景.instantiate()
		get_tree().root.add_child(当前菜单实例)
		var 当前菜单 = 当前菜单实例.get_node("Control")
		
		# 设置菜单位置为鼠标位置
		var 鼠标位置 = get_global_mouse_position()
		当前菜单.position = 鼠标位置
		
		# 更新菜单内容
		当前菜单实例.显示物品信息(当前物品)

#鼠标离开
func _on_mouse_exited():
	if !是否显示物品菜单:
		清理当前菜单()

# 显示物品菜单
func 显示物品菜单():
	清理当前菜单()
	
	当前菜单实例 = 物品菜单场景.instantiate()
	get_tree().root.add_child(当前菜单实例)
	var 当前菜单 = 当前菜单实例.get_node("Control")
	
	# 设置菜单位置为鼠标位置
	var 鼠标位置 = get_global_mouse_position()
	当前菜单.position = 鼠标位置
	if Ui.环境状态!=2:
		# 更新菜单内容
		当前菜单实例.get_item_data(当前物品)
	if Ui.环境状态==2:
		当前菜单实例.合成(当前物品,序号)
	
	# 连接菜单关闭信号
	当前菜单实例.tree_exited.connect(func(): 是否显示物品菜单 = false)

# 安全清理当前菜单
func 清理当前菜单():
	if is_instance_valid(当前菜单实例):
		当前菜单实例.queue_free()
	当前菜单实例 = null
